package bil.busca;

import bil.Config;
import bil.imagem.Imagem;
import bil.imagem.ImagemModel;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import javax.swing.JProgressBar;
import javax.swing.JTable;

/**
 *
 * @author Eduardo Folly
 */
public class Buscador implements Runnable {

    private JTable tabela;
    private ImagemModel imagens;
    private JProgressBar bar;
    private String endereco;
    private int ini;
    private int qtd;
    private int id = 1;
    private String endant = "";

    public Buscador(JProgressBar bar, String endereco, int ini, int qtd, JTable tabela) {
        this.bar = bar;
        this.endereco = endereco;
        this.ini = ini;
        this.qtd = qtd;
        this.tabela = tabela;
        this.imagens = (ImagemModel) tabela.getModel();
    }

    private void adquire(String endereco) throws MalformedURLException, IOException {
    }

    public void run() {
        try {
            int passo = 20;
            bar.setValue(0);
            bar.setMaximum(qtd);

            endereco = endereco += "&start=%s%&ndsp=" + Integer.toString(passo);

            for (int x = ini; x < qtd; x += passo) {
                String pag = endereco.replaceAll("%s%", Integer.toString(x));

//              System.out.println(pag);

                URLConnection con = new URL(pag).openConnection();
                con.setRequestProperty("User-Agent", Config.getInstance().getUserAgent());

                BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String inputLine;
                StringBuffer sb = new StringBuffer();

                while ((inputLine = in.readLine()) != null) {
                    sb.append(inputLine);
                }
                in.close();

                String html = sb.toString();

                int nposini = html.indexOf("([[") + 3;
                int nposfin = html.lastIndexOf("]]);");

                html = html.substring(nposini, nposfin);

//              System.out.println(html);

                String teste[] = html.split("\\],\\[");

//              System.out.println(teste.length);

                for (String t : teste) {
                    String seg[] = t.split("\",\"");
/*
                    for (int a = 0; a < seg.length; a++) {
                        System.out.println(a + ": " + seg[a]);
                    }
                    System.out.println();
*/
                    String end = seg[3].trim();

                    end = URLDecoder.decode(end.replaceAll("\"", "").trim(), "UTF-8");

                    String formato = seg[10].trim();

                    String temp[] = seg[9].split("-");
                    String temp2[] = temp[0].split("&times;");
                    int largura = Integer.parseInt(temp2[0].trim());
                    int altura = Integer.parseInt(temp2[1].trim());
                    String tamanho = temp[1].trim();

                    if (!end.equals(endant)) {
                        Imagem imagem = new Imagem(id, end, formato, tamanho, largura, altura);
                        imagem.setCacheGoogle(seg[14] + "?q=tbn:" + seg[2] + seg[3]);
                        imagens.addObject(imagem);
//                      System.out.println(imagem.toString());
//                      System.out.println();
//                      System.out.println();
                        tabela.setModel(imagens);
                        endant = end;
                        id++;
                    }

                    if (id > qtd) {
                        break;
                    }
                }
                bar.setValue(x + passo);
            }
            Thread.sleep(100);
            bar.setValue(bar.getMaximum());
            Thread.sleep(100);
            bar.setValue(0);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
